iT邦幫忙

2024 iThome 鐵人賽

DAY 20
0
Mobile Development

SwiftUI快速入門30天系列 第 20

Day 18: @Environment,使用環境變數

  • 分享至 

  • xImage
  •  

@Environment 教學

在 SwiftUI 中,@Environment 是一個強大的屬性包裝器,允許我們從視圖的環境中讀取共享的值。環境變數是由系統或上層視圖設置的,適用於整個視圖層次結構,因此能方便地在多個視圖之間共享資料。

什麼是 @Environment?

@Environment 允許我們訪問視圖所在環境中的特定鍵路徑(KeyPath)值,例如佈局方向、顏色方案或是使用者介面樣式等。這些環境變數通常由 SwiftUI 或父視圖自動提供。

使用範例

假設我們要動態地根據使用者的顯示模式來改變背景顏色,可以使用 @Environment 來實現:

struct ContentView: View {
    @Environment(\.colorScheme) var colorScheme

    var body: some View {
        Text("Hello, SwiftUI!")
            .padding()
            .background(colorScheme == .dark ? Color.black : Color.white)
            .foregroundColor(colorScheme == .dark ? Color.white : Color.black)
    }
}

在這個例子中,@Environment(\.colorScheme) 允許我們讀取當前的顏色模式,並根據它來調整視圖的外觀。

自訂環境變數

我們也可以創建自訂的環境變數。首先定義一個環境鍵:

struct CustomKey: EnvironmentKey {
    static let defaultValue: String = "Default Value"
}

extension EnvironmentValues {
    var customValue: String {
        get { self[CustomKey.self] }
        set { self[CustomKey.self] = newValue }
    }
}

然後在視圖中使用 @Environment(\.customValue) 來訪問這個自訂值。透過 environment 修飾符,我們可以在父視圖中設定該值,讓子視圖可以讀取。

結論

@Environment 提供了一種高效且優雅的方式來在 SwiftUI 中共享資料。掌握這個工具,能夠讓我們的視圖更具彈性和可重用性。


上一篇
Day19 - @FetchRequest,使用 Core Data 獲取資料
下一篇
Day18 - Binding 使用綁定傳遞資料
系列文
SwiftUI快速入門30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言